package com.wu.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wu.pojo.Comments;
import com.wu.pojo.model.CommentModel;
import com.wu.pojo.model.NewCommentsModel;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
 * @author: 吴磊
 * @program: blog
 * @create: 2021-04-19 20:30
 */
@Mapper
public interface CommentsMapper extends BaseMapper<Comments> {
    /**
     * 添加评论
     *
     * @param comments
     * @return
     */
    Integer addComment(Comments comments);

    /**
     * 通过文章Id获取所有一级评论
     *
     * @param articleId
     * @return
     */
    List<CommentModel> getCommentsByArticleIdAndParentCommentIdIsNull(@Param("articleId") String articleId);

    /**
     * 通过父评论Id查询子评论
     *
     * @param parentCommentId
     * @return
     */
    List<CommentModel> getCommentByParentId(@Param("parentCommentId") String parentCommentId);

    /**
     * 根据评论Id删除评论
     *
     * @param commentIdList
     * @return
     */
    Integer deleteCommentsById(List<String> commentIdList);

    /**
     * 通过文章Id返回评论数
     *
     * @param atricleId
     * @return
     */
    Integer getCommentsByArticleId(@Param("articleId") String atricleId);


    /**
     * 通过文章Id获取用户ids
     *
     * @param articleId
     * @return
     */
    Set<String> getUserIdsByArticleId(@Param("articleId") String articleId);

    /**
     * 通过文章Id删除文章评论
     *
     * @param articleId
     * @return
     */
    Integer deleteByArticleId(@Param("articleId") String articleId);


    /**
     * 通过用户Id获取评论总数
     *
     * @param userId
     * @return
     */
    Integer getCountByUserId(@Param("userId") String userId);

    /**
     * 通过用户Id获取自己所有的评论数量
     *
     * @param userId
     * @return
     */
    Integer getOwnerCommentCount(@Param("userId") String userId);

    /**
     * 通过评论id  pass  评论
     *
     * @param commentId
     * @return
     */
    Integer passCommentByCommentId(@Param("commentId") String commentId);


    /**
     * 通过评论Id获取文章Id
     *
     * @param commentId
     * @return
     */
    String getArticleIdByCommentId(@Param("commentId") String commentId);


    /**
     * 通过文章Id获取所有评论Id
     *
     * @param articleId
     * @return
     */
    List<String> getAllCommentsIdByArticleId(@Param("articleId") String articleId);

    /**
     * 通过评论Id获取评论详情
     *
     * @param commentId
     * @return
     */
    Comments getCommentsByCommentId(@Param("commentId") String commentId);

    /**
     * 通过评论Id删除单条评论
     *
     * @param commentId
     * @return
     */
    Integer deleteOneById(@Param("commentId") String commentId);

    /**
     * 通过用户Id查询他的最新评论
     *
     * @param userId
     * @return
     */
    List<NewCommentsModel> getNewComments(@Param("userId") String userId);

    /**
     * 通过评论Id获取用户Id
     *
     * @param commentId
     * @return
     */
    String getUserIdByCommentId(@Param("commentId") String commentId);
}
